特斯拉的Occupancy
Network并不是其原创的,其源自20年前室内机器人领域最常用的占据栅格地图(Occupancy Grid Map),当然现在依然是最常用的。特斯拉将Occupancy
Grid Map与BEV鸟瞰结合,将感知和路径规划合二为一,抛弃传感器融合和感知规划隔离,也就是Occupancy
Network,也可以勉强算一个创意。Occupancy Network最核心的改变在于智能算法从以目标检测(Object Detection)为主转变为语义分割(Semantic Segmentation)。在这一点上,特斯拉比Waymo还要先进。也因为这一点有人就认为Occupancy Network对识别(分类)完全不敏感,实际并非如此。
图片来源:Driving Datasets Literature Review
典型的3D Object Detection,还有更低一级的2D Object
Detection。所谓目标检测,检测到目标后用Bounding Box框选,并标注类别。Waymo的视频里我们经常可以见到。
图片来源:取自Waymo视频,都有Bounding Box。
目标检测中,只有目标和非目标两种类别,且无论目标是任何形状,都需要一个长方体的Bounding Box,这样做有个明显的缺点,对于目标的外形高度敏感,Bounding
Box框会有过多覆盖,准确度不高。再有就是对有遮挡的目标,Bounding Box会有重叠或不完整,比较难以表达3D环境。
图片来源:Deep Learning Specialization
深度学习大牛吴恩达(Andrew Ng)如图示,图像识别与探测一体无法分割,先识别分类才能检测出目标的信息,也就是说无法识别就无法检测目标信息,画不出Bounding Box,就认为前面什么都没有,不减速撞上去。目标检测升级就是语义分割或者说是Semantic Scene
Completion(SSC)。
图片来源:Towards a Meaningful 3D Map Using
a 3D Lidar and a Camera
特斯拉的Occupancy Network是将BEV输出的场景做语义分割,由于Transformer的加入,这个语义分割是连贯的,有时序的,非一帧图像,而是一系列视频。语义分割再与室内机器人的占据栅格地图法相结合,路径规划可以做得更好。栅格占有地图法一般是用激光雷达实现的,用于室内机器人导航。针对占据栅格地图(Occupancy Grid Map),我们将地图栅格化,对于每一个栅格的状态要么占用,要么空闲,要么未知(即初始化状态)。占用的栅格自然要避开,否则就可能发生碰撞。从这一点上说,特斯拉是L3级智能驾驶,如果是L2,遇到可能发生的碰撞,系统会提醒驾驶员是否刹车,如果不刹车,系统会主动刹车,即AEB,而L3是绕开障碍物,而不是刹车,这也是L2与L3的最明显区别。当然并非所有的障碍物都可以绕开,也要看障碍物和周围环境,因此需要语义分割。特斯拉的Occupancy Network实际可以看做是Semantic Scene Completion(SSC)语义场景重建,这个工作简单描述起来就是,给定单帧、多帧的图像,预测出场景的3D重建表示(Occupancy Grid Map)以及每一分部分语义分类信息,是在语义分割上加入了空间几何信息,即高度和深度,这种立体栅格也可以用VOXEL体素表示。通常机器人用的是2D栅格,而智能汽车自然得用3D即VOXEL。Semantic Scene Completion就是语义分割加深度信息推算。最难的就是如何不用立体双目和激光雷达推算出深度信息。为什么不用立体双目或激光雷达,很简单,这两者的深度信息计算主要由CPU承担,特别是激光雷达,2000TOPS的AI算力在此毫无用武之力,而CPU算力的增加远比AI算力增加要更耗费成本,因此从商业化角度,大部分厂家都努力增加AI算力,这样数字好看,且成本低,消费者也误认为AI算力才是最主要的,大部分厂家干脆不说CPU算力。
图片来源:MonoScene: Monocular 3D Semantic
Scene Completion
这是法国国立计算机及自动化研究院,法文为Institut national de recherche en informatique et en automatique (简称INRIA)提出的一种对标特斯拉Occupancy Network的模型,特斯拉用多个摄像头获得深度信息,INRIA只用一个单目就做到了。论文MonoScene: Monocular 3D
Semantic Scene Completion,https://arxiv.org/pdf/2112.00726.pdf。上图为论文框架。Occupancy Network是近年来智能驾驶领域最突出的革新,特斯拉靠此已经可以算超越Waymo,但是要真正量产L3/L4还是10年内没有可能,因为它太依赖深度学习或者说人工智能了。Occupancy Network仍然离不开语义检测,也就是分类问题,相比目标检测,语义分割确实会好一点,但不要忘记无论是语义分割还是目标检测任务,它们都有一个特征提取的backbone,这个backbone是共用的,它们都是从图像分类网络中进行嫁接的,检测(detection)的前提是必须识别(分类)。既然有分类,那么就会出现异常检测Anomaly Detection,实际任何类型的人工智能都会有异常检测,但大部分人都选择视而不见。最典型的异常检测就是出现无法识别或无法语义分类的目标,这样就无法提供VOXEL信息,对目标检测来说,就无法画出bounding box,就认为没有障碍物,不减速撞上去,对语义分割来说,就等同于empty,也有可能会撞上去。Chandola等2009年发表的《Anomaly detection: A survey》一文。由于Chandola,尤其是共同作者Vipin Kumar在数据挖掘、人工智能领域的影响力十分巨大,从而在他们的这篇文章中给出的三种数据异常类型对整个anomaly detection community的影响十分久远,该文给出的三种数据异常类型,分别为:Point anomaly,Contextual anomaly, Collective anomaly。自动驾驶领域最常遇到的就是Point
anomaly(点异常),即从未在训练数据集中出现或近似的未知物体,也有叫非标准目标,比如一人站在车后,而车后备箱打开状态。一个推婴儿车过路又拄着拐杖的老人,一个穿恐龙衣服的小孩,一个穿青蛙衣服的成年人,风暴过后一棵倒在路中间的树;油洒在道路上,周围摆放了锥桶,虽然油已经被清理了,但锥桶还未撤掉;一辆车停在人行道上;很少上路的工程机械或特种车辆,等等。最要命的是异常和噪音常常是在一起的,比如林荫道上光影迅速变化,风刮起来塑料布,此时突然有人推车横穿马路,真实世界每天都产生大量的此类异常。所谓Corner Case数据集完全没有可能,因为每时每刻都在产生新的Corner Case。Contextual Anomaly(上下文异常),比如从法国通过海峡隧道开车到英国,出隧道后发现车辆都是靠左行驶。一人横穿马路,穿越到一半又倒了回去。遇到碰瓷的。旁边静止的车辆前突然出现一个行人;川流不息的路上,一辆相邻车道仅稍微领先的车辆,不打转向灯,突然变道插入;在十字路口不遵循礼让规则的车辆。Collective Anomaly(集体异常),市中心聚集大量或站或走、高举标语高喊口号的人群;高速公路出现事故而出现了交通拥堵;十字路口出现了建筑工地,除了日常的交通标志外,还出现大量用于管制工地附近秩序的交通标志。深度学习或者说人工智能对此无能为力,唯一能做的就是增加数据集的规模,就是最笨的穷举法。人工智能是个黑盒子,人们只知道其结果,不知道其过程,它不具备可解释性。唯一可以确定的是训练数据集和最早结果具有相关性。德国人写了篇论文《Anomaly Detection in
Autonomous Driving: A Survey》,文章总结了应对异常检测的办法。
图片来源:Anomaly Detection in Autonomous
Driving: A Survey
根据时间线我们可以轻易得出结论,早期的方法都是基于Feature Extraction,甚至有人想到了SVM这种非深度学习的方法。目前都转变为增加置信度,早期是基于贝叶斯网络的置信度,近期则是置信度学习,这种办法可算是鸵鸟政策,那就是对于未出现数据集中的不可识别视而不见,转而来强化数据集,置信学习概念来自一篇由MIT和Google联合提出的paper:《Confident Learning: Estimating Uncertainty in Dataset Labels》。论文提出的置信学习(confident learning,CL)是一种新兴的、具有原则性的框架,以识别标签错误、表征标签噪声并应用于带噪学习(noisy label learning)。它解决了数据集噪音的问题,就是带噪学习,最大的优势是可以用于发现标注错误的样本。汽车需要一个可解释性,可解释性是指人(包括机器学习中的非专家)能够理解模型在其决策过程中所做出的选择(怎么决策,为什么决策和决策了什么)。因为它与安全强关联,只有具备可解释性才能保证安全性不断提高,如果出了事故找不到人类思维可以理解的原因,那自然就无法解决事故,类似的事故还会发生。而神经网络或者说现在的人工智能最缺的就是可解释性。深度神经网络缺乏归纳偏置(Inductive bias),它对未知情况的预测很不确定也不好解释,这导致了使用深度模型时的“黑盒”困扰。如果是线性回归做拟合,我们可以观测其 Y 值与以 X 向量为参数的线性函数,如果是 Logistic 回归,我们可以观察其超平面对正负样本的切分情况,这些归纳偏置都可以证实(justify)模型的预测,而深度神经网络只能表明 Y 是 X 向量的某种非线性函数,该函数与数据增强、网络结构、激活函数、归一化等各种在训练过程中加入的约束条件有关,这导致在实际使用中无法证实预测结果的有效性,简单说就是车企搞了个算法,它无法预测在某个环境下识别目标的准确度,完全是听天由命,为什么在某个场景下能识别,换了一个场景就无法识别,无法解释。无法解释的最大缺点就是无法迭代升级,众所周知,AI 的超参数决定着模型学习效果和速度。相比普通机器学习任务,深度学习需要的训练时间较长,因此调参技巧就显得尤为重要。但鉴于深度学习「炼丹」的特性,不同的模型需要不同的超参数,而每个超参的意义又不同,在不同实验中,参数和调整的方向又都不一样。调参这件事一直以来就是靠运气了,也就是说,无人驾驶的安全性寄托在AI工程师们的运气好坏上。显然,这样就无法迭代升级,这也是目前为何L3/L4级无人驾驶停滞不前的主要原因,可能你搞了几个月发现还不如上一个版本好。再有一个就是无法量化评估智能驾驶的先进程度,当前主流人工智能方法都有一个基本的统计学上的假设——“独立同分布”,即我们所训练的模型和所测试的模型要求是一个分布,换句话说,就是要求测试模型的数据和训练模型的数据“长得像”,只有在长得像的情况下,我们现在这个模型的性能才是有保障的。而如果测试这个模型的数据分布和训练分布存在偏差,从理论和实际角度而言,这个模型的性能不稳定且没有保障。在实际的应用过程中,其实很难保证一个模型的测试分布和训练分布是一致的。比如无人驾驶,我们在开发无人驾驶汽车视觉模块的时候会采集很多特征来训练这样的视觉模块,训练出来以后,再在特定的训练数据分布下训练该模块。当实际产品上线后,没有办法保证司机会将该汽车驾驶到什么样的城市,以及这个城市的分布和训练数据分布是否大体一致。就像现在衡量算法都是去KITTI、nuScenes、ApolloScape、WOD、BDD打榜,这样的成绩实际毫无意义,真实场景和这些数据集差别极大,尤其是中国的城市场景。不可解释性的另一个后果就是人与机器之间没有办法协同,也就是说无法做到机器出错时人工接手,也就是L3级智能驾驶。任何两个主体之间要想协同,两个主体都必须具备可解释性,也需要具备共同语言,但深度学习不行,它不可解释,它不知道何时会出错,不知道何时会发生Anomaly Detection。人类大部分情况下是理性的,可解释可预测的,人类和深度学习机器之间不具备共同语言,自然也就无法顺利接手。免责说明:本文观点和数据仅供参考,和实际情况可能存在偏差。本文不构成投资建议,文中所有观点、数据仅代表笔者立场,不具有任何指导、投资和决策意见。